Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: get absorption- and float-voltage from MPPTs #1140

Open
wants to merge 7 commits into
base: development
Choose a base branch
from

Conversation

SW-Niko
Copy link

@SW-Niko SW-Niko commented Jul 29, 2024

PR includes the following:

  • feature: read "absorption voltage" and "float voltage" from MPPTs
  • extended: add some VE.Direct asynchronous messages descriptions
  • extended: additional VictronMPPT class functions to get "MPPT-Mode", "absorption voltage" and "float voltage"
  • bug fix: some HEX-Commands getting lost if we send to fast the next command
  • correction of some typing errors

@SW-Niko
Copy link
Author

SW-Niko commented Jul 29, 2024

Hallo @schlimmchen
Beim testen der neuen Funktionen ist mir aufgefallen, das die MPPTs nicht immer auf die HEX-Kommandos antworten.
Nur auf ungefähr 30% der HEX-Kommandos bekommen wir eine Antwort.
Das ist bis jetzt nicht weiter negativ aufgefallen, weil die Temperaturen nur angezeigt werden und die
"Network total DC power" zusätzlich als asynchrone Nachricht bei jeder Änderung des Wertes rein kommt.
Ich hab das mal mit einfachen Mitteln gefixt. Aber wenn wir noch mehr HEX-Kommandos versenden dann muss man das vermutlich anders lösen. Im log kann man nun schön verfolgen wie die Daten auf eine Anfrage reinkommen.
[VE.Direct MPPT 7/17] Sending Hex Command: :7ECED0075, Free FIFO-Buffer: 118
[VE.Direct MPPT 7/17] Hex Data: Smart Battery Sense Temperature (0xEDEC): 31.50°C

Momentan wird mit der "absorption voltage" und der "float voltage" noch nichts gemacht.
Ich bin beim testen eines "Solar-Passthrough Modes" der im MPPT Absorption- und Float-Mode funktioniert.
Sollte in den nächsten Tagen kommen.

@schlimmchen
Copy link
Collaborator

Beim testen der neuen Funktionen ist mir aufgefallen, das die MPPTs nicht immer auf die HEX-Kommandos antworten.

Das war mir auch schon aufgefallen, aber ich dachte das sei bei mir weggegangen nach Neuverdrahtung. Gerade nochmal die Konsole kurz mitlaufen lassen und bei mir scheinen die HEX-Anforderungen brav und zuverlässig beantwortet zu werden. Ich hatte dazu das Absenden der HEX-Requests synchronisiert mit den asynchronen TEXT Nachrichten, also verschicken nachdem eine valide TEXT Nachricht dekodiert wurde. In deinem Setup scheint das nicht auszureichen.

Ich hab das mal mit einfachen Mitteln gefixt.

Die Idee hatte ich auch schon, hatte mir aber nicht gefallen, weil dann das Alter der Daten entsprechend anwächst. Das hast du wohl auch schon gesehen, denn du schreibst

Aber wenn wir noch mehr HEX-Kommandos versenden dann muss man das vermutlich anders lösen

Die richtige Lösung wäre einen asynchronen Task laufen zu lassen, pro MPPT Controller, der nichts anderes tut als eine Nachricht zu schicken, die Antwort zu dekodieren (oder Timeout), und dann die nächste Nachricht schicken, für alle Datenpunkte, die man einsammeln will. Das alles in eine Loop mit 1s Sleep zwischen den Runden.

Im log kann man nun schön verfolgen wie die Daten auf eine Anfrage reinkommen.

Hm? Das war doch schon vorher da...

Ich bin beim testen eines "Solar-Passthrough Modes" der im MPPT Absorption- und Float-Mode funktioniert.

Da gibt es ein anders Issue/Diskussion dazu, das hab ich schon mitbekommen. Das Thema ist spannend, ich kenne das Problem und es ist lästig und ich hab noch keine Idee, wie man das lösen könnte. Ob man dafür die Float und Absorption Voltage kennen muss, wage ich allerdings zu bezweifeln, denn der Controller teilt seinen Mode ja bereits mit?

@SW-Niko
Copy link
Author

SW-Niko commented Aug 5, 2024

Der Bug ist mir erst aufgefallen als ich die Abfrage der "absorption voltage" und der "float voltage" einfach angehängt habe.
sendHexCommand(Command::GET, Register::ChargeControllerTemperature);
sendHexCommand(Command::GET, Register::SmartBatterySenseTemperature);
sendHexCommand(Command::GET, Register::NetworkTotalDcInputPower);
sendHexCommand(Command::GET, Register::BatteryFloatVoltage);
sendHexCommand(Command::GET, Register::BatteryAbsorptionVoltage);

und dann kam ab und zu die "float voltage" auch nach 10 sec noch nicht an. Aber kein problem mit der "absorption voltage".
Irgendwann habe ich die beiden letzten Zeilen vertauscht und dann kam die "float voltage" zuverlässig an aber die "absorption voltage" nicht. 🤔
Ich vermute das der MPPT einen Befehl verwirft, wenn vor der Abarbeitung ein neuer Befehl ankommt. In den Victron Unterlagen / Foren habe ich zu dem Problem nichts gelesen.

Die richtige Lösung wäre einen asynchronen Task laufen zu lassen, pro MPPT Controller, der nichts anderes tut als eine Nachricht zu schicken, die Antwort zu dekodieren (oder Timeout), und dann die nächste Nachricht schicken, für alle Datenpunkte, die man einsammeln will. Das alles in eine Loop mit 1s Sleep zwischen den Runden.

Ja, das wäre die richtige Lösung. Ich habe auch schon daran gedacht, war mir aber nicht sicher ob meine C++ Fähigkeiten schon reichen und deshalb eine einfache Lösung gewählt.
Hmmm.... ich probier mal ob ich das hinbekomme.

Ein Problem haben wir momentan nicht weil ja
sendHexCommand(Command::GET, Register::NetworkTotalDcInputPower);
aktuell noch die letzte Zeile ist und somit immer funktionieren sollte.

Ob man dafür die Float und Absorption Voltage kennen muss, wage ich allerdings zu bezweifeln, denn der Controller teilt seinen Mode ja bereits mit?

Ich regle über die Spannung und nicht über die Leistung/Strom. Und dann verwende ich gleich die im MPPT hinterlegen Spannungen. Ich denke das hat Vorteile. Fasse ich alles noch in Text ... Noch etwas Geduld bitte.

@SW-Niko
Copy link
Author

SW-Niko commented Aug 8, 2024

Hallo @schlimmchen ,
Ich habe das Senden der hex commands jetzt umgebaut. Die "NetworkTotalDcInputPower" wird jede Sekunde abgefragt und alle anderen Werte nach 4 Sekunden.

21:59:00.759 > [VE.Direct MPPT 7/17] Sending Hex Command: :7F6ED006B, Free FIFO-Buffer: 118
21:59:00.823 > [VE.Direct MPPT 7/17] Hex Data: MPPT Float Voltage (0xEDF6): 27.20V
21:59:00.872 > [VE.Direct MPPT 7/17] Sending Hex Command: :7F7ED006A, Free FIFO-Buffer: 118
21:59:00.998 > [VE.Direct MPPT 7/17] Hex Data: MPPT Absorption Voltage (0xEDF7): 29.20V
21:59:01.158 > [VE.Direct MPPT 2/40] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
21:59:01.412 > [VE.Direct MPPT 2/40] Hex Data: Network Total DC Power (0x2027): 0.00W
21:59:01.626 > [VE.Direct MPPT 7/17] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
21:59:01.677 > [VE.Direct MPPT 7/17] Hex Data: Network Total DC Power (0x2027): 0.00W
21:59:01.791 > [VE.Direct MPPT 2/40] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
21:59:01.848 > [VE.Direct MPPT 2/40] Hex Data: Network Total DC Power (0x2027): 0.00W
21:59:01.941 > [VE.Direct MPPT 7/17] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
21:59:01.993 > [VE.Direct MPPT 7/17] Hex Data: Network Total DC Power (0x2027): 0.00W
21:59:02.145 > [VE.Direct MPPT 2/40] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
21:59:02.200 > [VE.Direct MPPT 2/40] Hex Data: Network Total DC Power (0x2027): 0.00W
21:59:02.475 > [VE.Direct MPPT 7/17] Sending Hex Command: :727200007, Free FIFO-Buffer: 118
21:59:02.529 > [VE.Direct MPPT 7/17] Hex Data: Network Total DC Power (0x2027): 0.00W
21:59:03.126 > [VE.Direct MPPT 2/40] Sending Hex Command: :7DBED0086, Free FIFO-Buffer: 118
21:59:03.178 > [VE.Direct MPPT 7/17] Sending Hex Command: :7DBED0086, Free FIFO-Buffer: 118
21:59:03.237 > [VE.Direct MPPT 2/40] Hex Data: MPPT Temperature (0xEDDB): 41.10°C
21:59:03.300 > [VE.Direct MPPT 7/17] Hex Data: MPPT Temperature (0xEDDB): 41.10°C

Mir ist beim Testen noch was aufgefallen. Ich konnte plötzlich kein Update über die Weboberfläche machen aber über die serielle Schnittstelle ging es ohne Probleme. Er hat erst wieder funktioniert nachdem ich die Größe der Datei etwas reduzieren konnte.

@SW-Niko SW-Niko marked this pull request as draft August 8, 2024 21:07
@SW-Niko SW-Niko marked this pull request as ready for review August 16, 2024 08:13
@SW-Niko SW-Niko mentioned this pull request Aug 16, 2024
Copy link
Collaborator

@schlimmchen schlimmchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know you made this for #1167, but this could and should be its own feature, where we add the float and absorbtion values to the live view, MQTT and HASS. If you are not motivated for that, I can pick it up at some point in the future.

lib/VeDirectFrameHandler/VeDirectMpptController.h Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.h Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.h Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.h Outdated Show resolved Hide resolved
src/VictronMppt.cpp Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.cpp Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.cpp Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.cpp Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.cpp Outdated Show resolved Hide resolved
lib/VeDirectFrameHandler/VeDirectMpptController.cpp Outdated Show resolved Hide resolved
@SW-Niko
Copy link
Author

SW-Niko commented Sep 5, 2024

all changes have been implemented. If the test on my system is positive tomorrow then I will update the code.

@SW-Niko
Copy link
Author

SW-Niko commented Sep 7, 2024

Ok, works on my system since yesterday

@schlimmchen schlimmchen force-pushed the development branch 2 times, most recently from 91cc2fc to 8ff94e7 Compare September 16, 2024 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants